package swardToOffer.method_2_sort_or_find.find;

import java.util.Arrays;

/**
 * @Author ChanZany
 * @Date 2021/5/26 16:06
 * @Version 1.0

 面试题57（一）：和为s的两个数字
 题目：输入一个递增排序的数组和一个数字s，在数组中查找两个数，使得它们
 的和正好是s。如果有多对数字的和等于s，输出任意一对即可。
 方法1:双指针法.
 由于数组递增,所以定义左指针i和右指针j分别指向数组首尾,若a[i]+a[j]==s则返回
 若a[i]+a[j]>s,说明右指针得左移使得他们的和<=s
 若a[i]+a[j]<s,说明左指针得右移,使得他们得和大于等于s
 */
public class TwoNumbersWithSum {
    public int[] twoSum(int[] nums, int target) {
        if (nums.length<=1) return null;
        int i=0,j=nums.length-1;
        while (i<j){
            int sum = nums[i] + nums[j];
            if (sum==target) break;
            if (sum >target) j--;
            if (sum<target) i++;
        }
        return new int[]{nums[i],nums[j]};
    }


    public static void main(String[] args) {
        int [] nums = new int[]{1,2,3,4,5};
        int target = 5;
        TwoNumbersWithSum Main = new TwoNumbersWithSum();
        System.out.println(Arrays.toString(Main.twoSum(nums, target)));
    }
}
